package com.zpark;

import com.zpark.pojo.Student;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @PackageName: com.zpark
 * @ClassName: DOM4JCreateXmlFileDemo
 * @Description: 使用DOM4J生成xml文件
 * @author: RZS
 * @date: 2021/8/15  22:00
 */
public class DOM4JCreateXmlFileDemo {
    /**
     * 生成xml文件
     * 其大致步骤为：
     * 		1.创建一个Document对象，表示一个空白文档
     * 		2.向Document中添加根元素
     * 		3.按照xml文档结构从根标签开始逐级添加子标签以及对应的数据
     * 		4.创建XmlWrite
     * 		5.使用XmlWrite写出Document，生成文档
     */
    public static void main(String[] args) throws Exception {
        // 准备需要写入的数据
        List<Student> list = new ArrayList<Student>();
        list.add(new Student("大锤", "北京", 26));
        list.add(new Student("张三丰", "北京", 140));
        list.add(new Student("金轮法王", "西藏", 59));
        list.add(new Student("黄蓉", "杭州", 26));
        list.add(new Student("郭靖", "蒙古", 32));

        // 1.创建一个Document对象，表示一个空白文档
        Document document = DocumentHelper.createDocument();
        // 2.向Document中添加根元素, students表示根标签
        /**
         * Document提供了添加根元素的方法：
         * Element addElement(String name)
         * 添加后会根据标签以一个Element实例返回，以便于我们对其继续操作，
         * 注意，这个方法只能调用一次
         *
         * Element也提供了添加相关信息的方法：
         * Element addElement(String name)，向当前标签中添加给定标签名的子标签
         *
         * Element addText(String text)，向当前标签中添加指定的文本，返回的还是当前标签
         * （这样做的好处是 ，可以继续添加其他内容）
         */
        Element addElement = document.addElement("students");
        // 3.按照xml文档结构从根标签开始逐级添加子标签以及对应的数据
        for (Student student : list) {
            // 添加相应的子标签对应的属性和值
            Element element = addElement.addElement("student");// 添加student标签
            // 向student标签下添加子标签和值
            element.addElement("name").addText(student.getName());
            element.addElement("location").addText(student.getLocation());
            element.addElement("age").addText(student.getAge()+"");
        }
        /*
         * XMLWriter符合Java高级流的用法，它负责将Document对象以xml文档格式的形式写入到文件当中
         */
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("Java-DOM4J解析/src/main/resources/students.xml"));
        xmlWriter.write(document);
        xmlWriter.close();

    }
}
